package jianzhiOffer;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * 46. 把数字翻译成字符串
 * 给定一个数字，我们按照如下规则把它翻译为字符串：0 翻译成 “a” ，1 翻译成 “b”，……，11 翻译成 “l”，……，25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数，用来计算一个数字有多少种不同的翻译方法。
 *
 * @author 司松坡
 * @createTime 2023年04月26日
 */
public class Jian46 {
    public int translateNum(int num) {
        if (num < 10) {
            return 1;
        }
        List<Integer> list = new ArrayList<>();
        while (num > 9) {
            list.add(num % 10);
            num = num / 10;
        }
        list.add(num);
        int size = list.size();
        int[] ints = new int[size];
        for (int i = 0; i < size; i++) {
            ints[size - i - 1] = list.get(i);
        }
        int[] res = new int[size];
        res[0] = 1;
        if (ints[0] * 10 + ints[1] < 26) {
            res[1] = 2;
        } else {
            res[1] = 1;
        }
        if (size > 2) {
            for (int i = 2; i < size; i++) {
                if (ints[i - 1] * 10 + ints[i] < 26 && ints[i - 1] != 0) {
                    res[i] = res[i - 1] + res[i - 2];
                } else {
                    res[i] = res[i - 1];
                }
            }
        }
        return res[size - 1];
    }
}
